// 编码风格

// https://www.npmjs.com/package/eslint-plugin-unicorn
// https://eslint.bootcss.com/docs/rules/
// https://eslint.org/docs/rules/
module.exports = {
    plugins: [
        "eslint-plugin-unicorn",
    ],
    rules: {
        // 大括号风格
        "brace-style": ["warn", "1tbs"],
        // 要求或禁止末尾逗号
        "comma-dangle": ["warn", "always-multiline"],
        // 要求文件末尾存在空行.最后有一个空行
        "eol-last": "warn",
        // 不允许指定的标识符.类似保留字
        "id-denylist": ["error", "any", "Number", "number", "String", "string", "Boolean", "boolean", "Undefined", "undefined"],
        // 要求标识符匹配一个指定的正则表达式.目前用不到
        "id-match": "warn",
        // 强制使用一致的缩进。由@typescript-eslint/indent接管
        "indent": "off",
        "@typescript-eslint/indent": ["error", 4, { "ArrayExpression": "first", "ObjectExpression": "first" }],
        // 强制使用一致的换行风格(关闭)
        "linebreak-style": ["off", "unix"],
        // 一个文件只能有一个class
        "max-classes-per-file": ["error", 1],
        // 函数定义中最大参数个数
        "max-params": ["error", { max: 5 }],
        // 单个文件最多400行。默认300
        "max-lines": ["error", 400],
        // 当行最大长度140。默认80
        "max-len": ["warn", { code: 140 }],
        // 强制函数最大代码行数。默认50，设置80
        "max-lines-per-function": ["error", { skipBlankLines: true, skipComments: true, max: 80 }],
        // 禁止出现空语句块
        "no-empty": ["warn", { allowEmptyCatch: true }],
        "no-irregular-whitespace": "error",
        "no-multiple-empty-lines": "error",
        // 禁用行尾空格
        "no-trailing-spaces": "warn",
        // 禁止标识符中有悬空下划线
        "no-underscore-dangle": "error",
        // 禁止出现未使用过的变量
        "no-unused-vars": "off",
        "@typescript-eslint/no-unused-vars": "warn",
        // TODO 分号 ; 结尾。https://eslint.org/docs/rules/semi#options
        "semi": ["warn", "always", { omitLastInOneLineBlock: true }],
        // 要求或禁止 函数圆括号 之前有一个空格。这里是要求箭头函数前有一个空格
        "space-before-function-paren": [ "warn", { "anonymous": "never", "asyncArrow": "always", "named": "never" }],
        // 禁止或强制圆括号内的空格。这里要求是没有空格
        "space-in-parens": ["error", "never"],
        // 文件命名规则。这里是“羊肉串”和小驼峰的写法
        "unicorn/filename-case": ["error", { cases: { kebabCase: true, camelCase: true } }],
    }
}